/**
 * 用户状态管理
 * 管理用户登录、注销、获取信息等状态
 */
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
import { login as loginApi, getUserInfo as getUserInfoApi, logout as logoutApi } from '../service/auth';
import { setToken, getToken, removeToken } from '../utils/auth';
import { LoginData } from '../types/login';

// 默认头像
const defaultAvatar = 'https://api.ixiaowai.cn/mcapi/mcapi.php';

/**
 * 用户状态管理
 */
export const useUserStore = defineStore('user', () => {
  const token = ref(getToken() || '');           // 用户token
  const name = ref('');                          // 用户名
  const nickname = ref('');                      // 昵称
  const userId = ref<string | number>('');       // 用户ID
  const tenantId = ref<string>('');              // 租户ID
  const avatar = ref('');                        // 头像
  const roles = ref<Array<string>>([]);          // 角色列表
  const permissions = ref<Array<string>>([]);    // 权限列表
  const clientRoleType = ref<string>('00000');   // 用户身份类型，默认为设计师

  // 获取用户身份名称
  const roleName = computed(() => {
    return clientRoleType.value === '00001' ? '雇主' : '设计师';
  });

  /**
   * 登录方法
   * @param userInfo 用户登录信息
   * @returns Promise
   */
  const login = async (userInfo: LoginData): Promise<void> => {
    try {
      const res = await loginApi(userInfo);
      const data = res.data;
      
      // 保存token
      setToken(data.access_token);
      token.value = data.access_token;
      
      // 保存用户身份类型
      if (userInfo.clientRoleType) {
        clientRoleType.value = userInfo.clientRoleType;
      }
      
      return Promise.resolve();
    } catch (error) {
      return Promise.reject(error);
    }
  };

  /**
   * 获取用户信息
   */
  const getInfo = async (): Promise<void> => {
    try {
      const res = await getUserInfoApi();
      
      // 适配新的返回结构：{ code: 200, msg: "操作成功", data: { userName, nickName, ... } }
      if (res.data && res.data.code === 200 && res.data.data) {
        const userData = res.data.data;
        
        // 设置用户信息
        name.value = userData.userName || '';
        nickname.value = userData.nickName || '';
        
        // 设置头像，如果没有则使用默认头像
        avatar.value = userData.avatar || defaultAvatar;
        
        // 设置其他信息
        userId.value = userData.userId || '';
        
        // 如果API返回了用户身份类型，则更新
        if (userData.clientRoleType) {
          clientRoleType.value = userData.clientRoleType;
        }
        
        // 如果需要，设置角色和权限
        roles.value = ['USER']; // 默认角色
        
        return Promise.resolve();
      } else {
        return Promise.reject(new Error('获取用户信息失败'));
      }
    } catch (error) {
      return Promise.reject(error);
    }
  };

  /**
   * 注销方法
   */
  const logout = async (): Promise<void> => {
    try {
      await logoutApi();
    } finally {
      // 清除用户信息
      token.value = '';
      roles.value = [];
      permissions.value = [];
      clientRoleType.value = '00000'; // 重置为设计师
      removeToken();
    }
  };

  /**
   * 重置用户状态
   */
  const resetState = () => {
    token.value = '';
    name.value = '';
    nickname.value = '';
    userId.value = '';
    tenantId.value = '';
    avatar.value = '';
    roles.value = [];
    permissions.value = [];
    clientRoleType.value = '00000'; // 重置为设计师
  };

  return {
    token,
    name,
    nickname,
    userId,
    tenantId,
    avatar,
    roles,
    permissions,
    clientRoleType,
    roleName,
    login,
    getInfo,
    logout,
    resetState
  };
}); 